package com.hehe.Repository;



import com.hehe.POJO.Qq_space;
import com.hehe.POJO.Qq_space_user_like;
import jakarta.persistence.LockModeType;
import lombok.experimental.Delegate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface QQspaceUserLikeRepository extends JpaRepository<Qq_space_user_like, Long> {

    Qq_space_user_like findByUsername(String username);



//你在定义自定义查询时，使用了 @Modifying 注解，这通常用于更新或删除操作。
// 而你这里的查询操作应该使用 @Query 注解，
// 不需要 @Modifying 和 @Transactional 注解。
// 另一个问题是，select * from Qq_space_user_like q 在 JPQL（Java Persistence Query Language）中是错误的，
// 因为 JPQL 不支持 select * 语法。你需要显式地列出要选择的实体。

    // 悲观锁 (并发问题)
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("SELECT q FROM Qq_space_user_like q WHERE q.username = :username AND q.qq_space_id = :qq_space_id")
    Qq_space_user_like findByUsernameAndQq_space_id(String username, long qq_space_id);

    @Modifying
    @Query(" delete  from Qq_space_user_like q where q.username = :username and q.qq_space_id = :qq_space_id")
    Integer deleteByUsernameAndQqSpaceId(String username, Long qq_space_id);


    @Query("select q.qq_space_id from Qq_space_user_like q where q.username = :username and q.qq_space_id in :qq_space_id_list")
    List<Integer> findByUserLike_list(String username, List<Long> qq_space_id_list);



}
